package model.entities;

import java.util.Calendar;
import java.util.Collection;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import model.dtos.FacturaDTO;
import model.persistence.daos.FacturaDAO;

@Entity
@Table(name = "Facturas")
public class Factura
{
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private int id;

	@Column(name = "monto", nullable = false)
	private float monto;

	@OneToOne
	@JoinColumn(name = "idMesa")
	private Mesa mesa;

	@OneToOne
	@JoinColumn(name = "idMozo")
	private Mozo mozo;

	@OneToMany
	@JoinColumn(name = "id")
	private Collection<ItemFactura> items;

	@Column(name = "fecha")
	private Calendar fecha;

	public static float calcularMontoFacturadoEnElDia(Local local)
	{
		float montoFacturado = 0;
		Collection<Factura> facturas = FacturaDAO.getFacturasDelDia(local);

		for (Factura factura : facturas)
		{
			montoFacturado += factura.getMonto();
		}

		return montoFacturado;
	}

	public float getMonto()
	{
		return monto;
	}

	public void setMonto(float monto)
	{
		this.monto = monto;
	}

	public Mesa getMesa()
	{
		return mesa;
	}

	public void setMesa(Mesa mesa)
	{
		this.mesa = mesa;
	}

	public Mozo getMozo()
	{
		return mozo;
	}

	public void setMozo(Mozo mozo)
	{
		this.mozo = mozo;
	}

	public int getId()
	{
		return id;
	}

	public Collection<ItemFactura> getItems()
	{
		return items;
	}

	public void setItems(Collection<ItemFactura> items)
	{
		this.items = items;
	}

	public Calendar getFecha()
	{
		return fecha;
	}

	public void setFecha(Calendar fecha)
	{
		this.fecha = fecha;
	}

	public FacturaDTO generarDTO()
	{
		FacturaDTO dto = new FacturaDTO();
		dto.setIdFactura(this.id);
		dto.setIdMesa(this.mesa.getId());
		dto.setIdMozo(this.mozo.getId());
		dto.setMonto(this.monto);
		dto.setFecha(this.fecha);

		return dto;
	}
}
